/****************************
*Author: Lisandro Martinez *
*Description:			   *
*Date: 8-25-2012		   *
*****************************/
#include<windows.h>
#include<string>
using std::string;
#include "SDL_GraphicsEngine.h"
#if !defined( GAMEMAIN_H )
#define GAMEMAIN_H

//The the Main Game Class that holds all the entities.
class GameMain
{
private:
	SDL_Surface *logo;

private:
	static SDL_GraphicsEngine *graphics;
	////////////////////////////////////////////////////////////////////////
	//
	// FUNCTION:    GameMain()
	//
	// DESCRIPTION: The private constructor
	//
	////////////////////////////////////////////////////////////////////////
	GameMain(SDL_GraphicsEngine *_graphics);
	////////////////////////////////////////////////////////////////////////
	//
	// FUNCTION:    GameMain()
	//
	// DESCRIPTION: The private 	Copy Constructor
	//
	////////////////////////////////////////////////////////////////////////
	GameMain( const GameMain &){}
	
	////////////////////////////////////////////////////////////////////////
	//
	// FUNCTION:    operator=()
	//
	// DESCRIPTION: The private Assignment Operator
	//
	////////////////////////////////////////////////////////////////////////
	GameMain &operator = (const GameMain &){}

	////////////////PROPERTIES/////////////////////////
	static GameMain *pInstance;//Instantiate the instance of the main class

	//keep traks of the hight of the screen
	int screen_height;
	//keep traks of the width of the screen
	int screen_width;
	/////////////ENTITIES/////////////////////

	////////////////////////////////////////////////////////////////////////
	//
	// FUNCTION:    CalculateFrameRate()
	//
	// DESCRIPTION: This Calculates the frames per 
	//				second and stores it in the window title
	//
	////////////////////////////////////////////////////////////////////////
	DWORD CalculateFrameRate();

	//The event structure
	SDL_Event event;

public:
    ////////////////////////////////////////////////////////////////////////
	//
	// FUNCTION:    GameInit()
	//
	// DESCRIPTION: Initialize all the Entities and members of the main class
	//
	////////////////////////////////////////////////////////////////////////
	string GameInit();
	////////////////////////////////////////////////////////////////////////
	//
	// FUNCTION:    GameShutdown()
	//
	// DESCRIPTION: Delete the instance of the class and shutdown the  all the 
	//				Entities.
	//
	////////////////////////////////////////////////////////////////////////
	string GameShutdown();
	////////////////////////////////////////////////////////////////////////
	//
	// FUNCTION:    Run()
	//
	// DESCRIPTION: Main game loop.
	//
	////////////////////////////////////////////////////////////////////////
	void Run();
	////////////////////////////////////////////////////////////////////////
	//
	// FUNCTION:    GetInstance()
	//
	// DESCRIPTION: Access the only instance of the class.
	//
	////////////////////////////////////////////////////////////////////////
	static GameMain *GetInstance(void);
	////////////////////////////////////////////////////////////////////////
	//
	// FUNCTION:    DeleteInstancce()
	//
	// DESCRIPTION: Delete the only instance of the class.
	//
	////////////////////////////////////////////////////////////////////////
	static void DeleteInstancce(void);
	////////////////////////////////////////////////////////////////////////
	//
	// FUNCTION:    ~GameMain()
	//
	// DESCRIPTION: The Main class distructor.
	//
	////////////////////////////////////////////////////////////////////////
	~GameMain(void);
};

#endif //!defined( MainWin_H )